package bancosys.tec.rtm.exception;

import java.util.Calendar;
import java.util.List;

/**
 * @author Koji
 */
public interface ExceptionFinder {

    /**
     * Retorna a lista de erros armazenada.
     * 
     * @return Lista de erros
     * @throws RTMException e
     */
    List<? extends ExceptionRecord> findAll() throws RTMException;

    /**
     * Encontra um determinado Erro dado o seu id.
     * 
     * @param id o id
     * @return O erro o determinado id
     * @throws RTMException e
     */
    ExceptionRecord find(long id) throws RTMException;

    /**
     * Encontra uma lista de erros dada uma determinada data.
     * 
     * @param date {@link Calendar}
     * @return Lista de Erros
     * @throws RTMException se houver uma excecao
     */
    List<? extends ExceptionRecord> findByDate(Calendar date) throws RTMException;

    /**
     * Retorna o valor maximo de id utilizado.
     * 
     * @return id maximo
     * @throws RTMException se houver uma excecao
     */
    long findMaxId() throws RTMException;

    /**
     * Encontra todos os erros armazenados após um determinado id.
     * 
     * @param id o long
     * @return Lista de Erros
     * @throws RTMException se houver uma excecao
     */
    List<? extends ExceptionRecord> findAllTracesAfterId(long id) throws RTMException;

    /**
     * Encontra uma lista de erros que satisfazem os parametros passados.
     * 
     * @param fatoIdStart long
     * @param fatoIdEnd long
     * @param startDate {@link Calendar}
     * @param finalDate {@link Calendar}
     * @param horarioStart {@link String}
     * @param horarioEnd {@link String}
     * @param user {@link String}
     * @param system {@link String}
     * @return {@link List}
     * @throws RTMException e
     */
    List<?> findTraces(long fatoIdStart, long fatoIdEnd, Calendar startDate, Calendar finalDate, String horarioStart, String horarioEnd,
            String user, String system) throws RTMException;

}
